package Reseau;

import Controler.Controler;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
import java.util.logging.Level;
import java.util.logging.Logger;
import protocol.Message;


public class Receive extends Thread{

    private Controler control;
    private boolean actif;
    private DatagramSocket socket;
    int port = 2235;

    public Receive(Controler p_control){
        try {
            this.control = p_control;
            socket = new DatagramSocket(port);
        } catch (SocketException ex) {
            System.out.println("Erreur: le socket de réception est déjà utilisé"+ex);
        }
    }

    public void setMonControl(Controler monControl) {
        this.control = monControl;
    }    
    
    public boolean isActif() {
        return actif;
    }

    public void setActif(boolean actif) {
        this.actif = actif;
    }

    //Réception d'un message
    public void run(){
        //le thread doit écouté tout le temps !
        while(actif){
            byte[] bufrec = new byte[1024];

            //Réception
            DatagramPacket packet = new DatagramPacket(bufrec, bufrec.length);
            try {
                socket.receive(packet);

            } catch (IOException ex) {
                System.out.println("Erreur: Le packet n'est pas reçu sur le socket"+ex);
            }

            ByteArrayInputStream monbuf = new ByteArrayInputStream(packet.getData());
            try {
                ObjectInputStream ois = new ObjectInputStream(monbuf);
                System.out.println("test01");
                control.action((Message) ois.readObject(), socket);
            } catch (ClassNotFoundException ex) {
                System.out.println("Erreur: pas de controler déclaré"+ex);
            } catch (IOException ex) {
                System.out.println("Erreur: pas de lecture du buffer");
            }
        }
        System.out.println("je ferme la socket de reception");
        socket.close();
    }


}